////////////////////////////////////////////////////////////////////////////////

#ifndef _POLYGON_H_
#define _POLYGON_H_

////////////////////////////////////////////////////////////////////////////////

#ifndef _SHAPE_H_
#include "shape.h"
#endif

#ifndef _PHYSICALTYPES_H_
#include "physicaltypes.h"
#endif

////////////////////////////////////////////////////////////////////////////////


/** Physical engine namespace */
namespace PE
{
////////////////////////////////////////////////////////////////////////////////

    struct Circle;
    struct Polygon;

////////////////////////////////////////////////////////////////////////////////

    /** Class for polygon shape
    *
    *  @author   Anastasia Karpinska
    *  @since    Dec 5th, 2009
    *  @updated  Dec 5th, 2009
    *
    */
    struct Polygon : public Shape
    {
    ////////////////////////////////////////////////////////////////////////////

        
        /** Points of polygon vertexes */
        Points m_Points;


    ////////////////////////////////////////////////////////////////////////////


        /** Constructor */
        Polygon( const Points& _points ) : m_Points(_points) {}


        /** Returns shapes intersector */
        virtual Intersector& GetIntersector( const Shape& _shape ) const;


        /** Returns shapes intersector for shape with circle */
        virtual Intersector& GetCircleIntersector() const;


        /** Returns shapes intersector for shape with polygon */
        virtual Intersector& GetPolygonIntersector() const;


    ////////////////////////////////////////////////////////////////////////////

    };

////////////////////////////////////////////////////////////////////////////////

};

////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////
